///******************** NG.Respate(C)  **********************************
//* 产品名称: Respate 科技
//* 文件名称: server.c
//* 功能描述: 系统日志
//* 程序作者: 雷帕特公司(南宫子萍)
//* 程序版本: V1.1														   
//* 编制日期: 2019/1/29
//* QQ:	2085827949
//**********************************************************************/
#include "LapNetRaw.h"
 





int Lap_netLayer(NetLayer* net,char* buff)
{

}












/********************************* 数据链路层 *******************/


// typedef struct netRawPackage netRawPack ;
// 原始套接字 接收数据
ssize_t Lap_rawRecv(int fd,void* buff,size_t size)
{
    return recvfrom(fd,buff,size,0,NULL,NULL);
}

// 原始套接字 发送数据
ssize_t Lap_rwaSendto(int fd,void* buff,size_t size)
{
    return sendto(fd,buff,size,0,NULL,0);
}


/*********************************************************************************
** 函数名称: Lap_macSprint
** 功能描述: 格式化MAC地址
** 输入参数: None.        
** 输出参数: None.
** 返回参数: return response .
**********************************************************************************/	
char* Lap_macSprint(const char* mac,char* buff)
{
    // 未分配空间，使用静态空间，不可重入
    static char sbuff[18]={0};
    char* tbuff = sbuff;
    int x = 0;
    unsigned char th = 0;
    if(buff != NULL) tbuff = buff;  // 外部分配空间，可重入

    for(int i=0; i< 6; i ++)
    {
        x = 3*i;
    
        th = (unsigned char)mac[i] / 16;   // 高四位
        if(th > 9 ) tbuff[x] = (th + 87) ;
        else tbuff[x] = th + '0';

        th =  (unsigned char)(mac[i]&0x0f); // 低四位
        if(th > 9 ) tbuff[x+1] = th + 87;
        else tbuff[x+1] = th + '0';

        tbuff[x+2]  = ':';
        
    }
    tbuff[17]  = '\0';  // 结束符
    return tbuff;
}



/*********************************************************************************
** 函数名称: lap_SeverHandle
** 功能描述: 服务器 客服端连接处理程序
** 输入参数: None.        
** 输出参数: None.
** 返回参数: return response .
**********************************************************************************/														 
int Lap_netRawPack2Stream(NetRawPack* pack,const char* buff)
{
    NetRawPack* pbuf = (NetRawPack*)buff;   // 类型强转
    if(pbuf == NULL) return -1;

    memcpy(pack->src_mac,pbuf->src_mac,6);
    memcpy(pack->dst_mac,pbuf->dst_mac,6);
    pack->type = ntohs(pbuf->type);

    // printf("src_mac:%s  dst_mac:%s\r\n",Lap_macSprint(pack->src_mac,NULL),"1234");
    switch ( pack->type)
    {
    case NET_TYPE_IPV4:
        printf("Ipv4\r\n");
        break;

    case NET_TYPE_ARP:
        printf("arp\r\n");
        break;

    case NET_TYPE_RARP:
        printf("rarp\r\n");
        break;

    case NET_TYPE_IPV6:
        printf("Ipv6\r\n");
        break;

    default:
        break;
    }
    return 0;   
}



// 读取数据
ssize_t  Lap_rawRead(NetRawPack* pack,const char* buff)
{
    switch (pack->type)
    {
    case NET_TYPE_IPV4:
        printf("Ipv4\r\n");
        break;

    case NET_TYPE_ARP:
        printf("arp\r\n");
        break;

    case NET_TYPE_RARP:
        printf("rarp\r\n");
        break;

    case NET_TYPE_IPV6:
        printf("Ipv6\r\n");
        break;

    default:
        break;
    }
    return 0; 
}




// int main()
// {
//     char buff[4096]={0};
//     NetRawPack pack;
    
//     int fd = Lap_rawSocket();
//     //printf("%d\r\n",'a'-9);
//     while (1)
//     {
//         int len = Lap_rawRecv(fd,buff,sizeof(buff));
//         //printf("fd:%d rec len:%d\r\n",fd,len);
//         Lap_netRawPack2Stream(&pack,buff);
//     }
    
    

//     return 0;
// }





